package controllers;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.*;
import models.*;
import play.Logger;
import play.db.jpa.GenericModel.JPAQuery;
import play.db.jpa.JPA;
import play.db.jpa.JPQL;
import play.mvc.Controller;

public class dptoAcademico extends Controller {

    public static SemestreAcademico SA2 = new SemestreAcademico();

    public static void extraerPeriodo() {
        String mensaje = "";
        //Extraemos la fecha de inicio y fin del ciclo academico
        SemestreAcademico SA = SemestreAcademico.find("order by id DESC").first();
       
        if(SA==null){
            System.out.println("Esta Vacio.....");
            SA = new SemestreAcademico();
        }
         SA2 = SA;
        //extraemos los datos del ultimo periodo de envio
        Periodo_Envio PE = Periodo_Envio.find("order by id DESC").first();

        if (PE == null) {
            mensaje = "Aun no se han registrado semestres.";
            PE = new Periodo_Envio();
        }

        //extraemos el ultimo registro llenado por el Jefe de Departamento los datos del ultimo registro de Plantilla Base
        Plantilla_Base pUl = Plantilla_Base.find("order by id DESC").first();

        List<Plantilla_Base> PB = llenarPlantilla();
        if (pUl == null) {
            mensaje = "Aun no se han registrado semestres.";
            //PB = 
        } else {
            PB = Plantilla_Base.find("pla_iCodigo", pUl.pla_iCodigo).fetch();
            //Imprimimos el contenido de la lista  
            Plantilla_Base Temp = new Plantilla_Base();
            Iterator iter = PB.iterator();
            while (iter.hasNext()) {
                Temp = (Plantilla_Base) iter.next();
                System.out.println(Temp.dia_iId + "  " + Temp.pla_sElegido + Temp.pla_iCodigo + "  " + Temp.pla_iHoraInicioClases + "  " + Temp.pla_iHoraFinClases);
            }
           
        }
        
       // System.out.println("Nombre "+SA.sem_vcNombre+ "  ini "+SA.getInicio() );

        Logger.info("Inicio");
        render(PB,PE,SA,mensaje);
        
    }
    

    public static void registrarPeriodo(Periodo_Envio PE) {
        PE.sem_nombre = SA2.sem_vcNombre;
        System.out.println("nom :" + PE.sem_nombre);
        System.out.println("ini " + PE.per_datFechaInicio);
        System.out.println("fin " + PE.per_datFechaFin);
        //show2(PE.id);
        PE.save();
        recargarPeriodo();
        //extraerPeriodo(PE.id);
    }

 

    public static void recargarPeriodo() {
        extraerPeriodo();
    }

    public static void jefeDptoAcademico() {
        render();
    }

    private static List<Plantilla_Base> llenarPlantilla() {
        List<Plantilla_Base> tmp= new ArrayList<Plantilla_Base>();
        for (int i = 0; i < 7; i++) {
            tmp.add(new Plantilla_Base(123, "si", i, 7, 22));
        }
        return tmp;
    }
    
    //metodo que registra los dias y horas de Clases
public static void registrarDiasHorasClase(){
        long pos;
        //Extraemos el ultimo id de los cursos
        Plantilla_Base Temp = Plantilla_Base.find("order by id DESC").first();
        if(Temp!=null){
            pos = Temp.id + 1;
        }else{
            pos = 111;
        }
        
        
        Plantilla_Base PB;
        String s1,s2,s3;
        for(int i=0;i<7;i++){
            //Dia elegido
            s1 = params.get("dia["+i+"]");
            //Hora de inicio de las clases del día elegido
            s2 = params.get("ini_dia["+i+"]");
            //Hora de Fin de las clases del día elegido
            s3 = params.get("fin_dia["+i+"]");

                PB = new Plantilla_Base(pos,s1,i, Integer.parseInt(s2),Integer.parseInt(s3));
                
                System.out.println("dia: ["+i+"]" + s1 +" cod: ["+pos+"]" +" Inicio "+ params.get("ini_dia["+i+"]")+ " Finaliza " + params.get("fin_dia["+i+"]"));
                PB.save();    
        }        
        
        recargarPeriodo();
    }
    
    public static void listaDocentes(){
        String mensaje = "exito";
          //Extraemos la fecha de inicio y fin del ciclo academico
        SemestreAcademico SA = SemestreAcademico.find("order by id DESC").first();
        SA2 = SA;
        if(SA==null){
            System.out.println("Esta Vacio.....");
            SA = new SemestreAcademico();
        }
        
        //extraemos los datos del Jefe de Departamento
        Docente JD = Docente.find("doc_vcCodigo","000000").first();
        
        
        List<Docente> DC = Docente.find("order by id DESC").fetch();
        if (DC == null) {
            mensaje = "Aun no se han registrado semestres.";
            //PB = 
        } else {
           
            //Imprimimos el contenido de la lista de Docentes 
            Docente Temp = new Docente();
            Iterator iter = DC.iterator();
            while (iter.hasNext()) {
                Temp = (Docente) iter.next();
                System.out.println(Temp.cat_vcNombre + "  " + Temp.doc_vcApellidoPaterno + Temp.doc_vcCodigo );
            }
           render(DC, mensaje,SA );
        }
    }
    
    public static void perfilJefe(){
         //Extraemos la fecha de inicio y fin del ciclo academico
        SemestreAcademico SA = SemestreAcademico.find("order by id DESC").first();
        SA2 = SA;
        if(SA==null){
            System.out.println("Esta Vacio.....");
            SA = new SemestreAcademico();
        }
        
        //extraemos los datos del Jefe de Departamento
        Docente JD = Docente.find("doc_vcCodigo","000000").first();
        
        render(JD,SA);
    }
    
    
    public static void exportarExcel(){
        try {
			// Writing Data to ExcelSheet
                        SemestreAcademico SA = SemestreAcademico.find("order by id DESC").first();
                        SimpleDateFormat formato = new SimpleDateFormat("dd-MM-yyyy");
			String filename = "envioDisponibilidad"+SA.sem_vcNombre+".xls";
                        System.out.println(filename);
			WorkbookSettings ws = new WorkbookSettings();
			ws.setLocale(new Locale("es", "PE"));
			WritableWorkbook workbook = Workbook.createWorkbook(new File(
					"public\\export\\"+filename), ws);
			WritableSheet s = workbook.createSheet("Disponibilidad", 0);
			//WritableSheet s1 = workbook.createSheet("ImageSheet", 0);
			writeDataSheet(s);
			//writeImageSheet(s1);
			workbook.write();
			workbook.close();
                        redirect("/public/export/"+filename);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (WriteException e) {
			e.printStackTrace();
		}
    }
    
    private static void writeDataSheet(WritableSheet s) throws WriteException {

		// Writing Data to ExcelSheet
		System.out.println("In writeDataSheet() Method");
		/* Format the Font */
		WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);
		WritableCellFormat cf = new WritableCellFormat(wf);
		cf.setWrap(true);

		/* Creates Label and writes date to one cell of sheet */
		Label l = new Label(0, 0, "Código", cf);
                s.addCell(l);
                
                l = new Label(1, 0, "Apellidos", cf);
		s.addCell(l);
                
                l = new Label(2, 0, "Nombres", cf);
		s.addCell(l);
                
                l = new Label(3, 0, "E-mail", cf);
		s.addCell(l);
                
                l = new Label(4, 0, "Fecha de envío", cf);
		s.addCell(l);
                int i=0,j=1;
                
                SemestreAcademico SA = SemestreAcademico.find("order by id DESC").first();
                List<Docente> DC = Docente.find("order by id DESC").fetch();
                
                
                if (DC == null) {
                    //mensaje = "Aun no se han registrado semestres.";
                    //PB = 
                } else {
                    
                    WritableCellFormat cf2 = new WritableCellFormat(NumberFormats.DEFAULT);
                    WritableFont wf3 = new WritableFont(WritableFont.TIMES, 10,
				WritableFont.NO_BOLD);
                    WritableCellFormat cf3 = new WritableCellFormat(wf3);
                    cf3.setWrap(true);

                   l = new Label(2, 8, "Nagesh", cf3);
                
                    for (Docente docente : DC) {
                                
                        JPAQuery query  = registroEnviados.find(" cod_docente = ? and periodo_acad = ?",docente.doc_vcCodigo,SA.sem_vcNombre);
                        registroEnviados registro = query.first();
                        query = Disponibilidad.find("cod_docente = ? and periodo_acad = ?",docente.doc_vcCodigo,SA.sem_vcNombre); 

                        Disponibilidad disponibilidad = query.first();
                        if(registro!=null && disponibilidad!=null){
                    
                            


                            if(disponibilidad!=null && registro!=null){
                            l = new Label(i, j, docente.doc_vcCodigo, cf3);
                            s.addCell(l);
                            l = new Label(i+1, j, docente.doc_vcApellidoPaterno + " "+docente.doc_vcApellidoMaterno , cf3);
                            s.addCell(l);
                            l = new Label(i+2, j, docente.doc_vcNombres, cf3);
                            s.addCell(l);
                            l = new Label(i+3, j, docente.doc_vcCorreo1, cf3);
                            s.addCell(l);
                            DateTime dt = new DateTime(i+4, j, new Date(registro.fecha), DateTime.GMT);
                            //l = new Label(i, j+3, registro.fecha+" "+registro.hora , dt);
                            s.addCell(dt);
                            }
                            j++;
                        }
                    }
                
                }
                
                
                
               /* WritableCellFormat cf1 = new WritableCellFormat(DateFormats.FORMAT9);
                
		

		DateTime dt = new DateTime(0, 1, new Date(), DateTime.GMT);

		s.addCell(dt);

//		/* Creates Label and writes float number to one cell of sheet */
//		l = new Label(2, 0, "Float", cf);
//		s.addCell(l);
//		WritableCellFormat cf2 = new WritableCellFormat(NumberFormats.FLOAT);
//		jxl.write.Number n = new jxl.write.Number(2, 1, 3.1415926535, cf2);
//		s.addCell(n);
//
//		n = new jxl.write.Number(2, 2, -3.1415926535, cf2);
//		s.addCell(n);
//
//		/*
//		 * Creates Label and writes float number upto 3 decimal to one cell of
//		 * sheet
//		 */
//		l = new Label(3, 0, "3dps", cf);
//		s.addCell(l);
//		NumberFormat dp3 = new NumberFormat("#.###");
//		WritableCellFormat dp3cell = new WritableCellFormat(dp3);
//		n = new jxl.write.Number(3, 1, 3.1415926535, dp3cell);
//		s.addCell(n);
//
//		/* Creates Label and adds 2 cells of sheet */
//		l = new Label(4, 0, "Add 2 cells", cf);
//		s.addCell(l);
//		n = new jxl.write.Number(4, 1, 10);
//		s.addCell(n);
//		n = new jxl.write.Number(4, 2, 16);
//		s.addCell(n);
//		Formula f = new Formula(4, 3, "E2+E3");
//		s.addCell(f);
//
//		/* Creates Label and multipies value of one cell of sheet by 2 */
//		l = new Label(5, 0, "Multipy by 2", cf);
//		s.addCell(l);
//		n = new jxl.write.Number(5, 1, 10);
//		s.addCell(n);
//		f = new Formula(5, 2, "F2 * 3");
//		s.addCell(f);
//
//		/* Creates Label and divide value of one cell of sheet by 2.5 */
//		l = new Label(6, 0, "Divide", cf);
//		s.addCell(l);
//		n = new jxl.write.Number(6, 1, 12);
//		s.addCell(n);
//		f = new Formula(6, 2, "F2/2.5");
//		s.addCell(f);
////
//		/*-----------------------------------------------------------*/
//		/* Format the Font */
//		WritableFont wf3 = new WritableFont(WritableFont.TIMES, 10,
//				WritableFont.NO_BOLD);
//		WritableCellFormat cf3 = new WritableCellFormat(wf3);
//		cf3.setWrap(true);
//
//		l = new Label(2, 8, "Nagesh", cf3);
//		s.addCell(l);
//
//		l = new Label(1, 9, "Water", cf3);
//		s.addCell(l);
//		n = new jxl.write.Number(2, 9, 35);
//		s.addCell(n);
//
//		l = new Label(1, 10, "Elictricity", cf3);
//		s.addCell(l);
//		n = new jxl.write.Number(2, 10, 57);
//		s.addCell(n);
//
//		l = new Label(1, 11, "Rent", cf3);
//		s.addCell(l);
//		n = new jxl.write.Number(2, 11, 750);
//		s.addCell(n);
//
//		f = new Formula(2, 13, "C10+C11+C12");
//		s.addCell(f);*/
	}
    
}
